"""
Дополнительная обработка вакансий.
Нормализация телефонов. Нормализация названий организаций.
Удаление дублей организаций по названию и по номеру телефона.
Бан организаций по имени.
Поиск организаций в ЛЕКСЕМе по номеру телефона.
Поиск организаций в ЛЕКСЕМе по имени.
"""


import sys
import os

#from PyQt5.QtCore import *
#from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *

import logging                                                                  # запись логов
import re                                                                       # регулярные выражения
import sqlite3


def main():
    global dbMS
    global conn

    app = QApplication(sys.argv)

    logging.basicConfig(filename='restore.log',level=logging.DEBUG,
        format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s %(message)s')

    if not os.path.exists('data'):
        os.makedirs('data')
    
    conn = sqlite3.connect("data\\work.db")
    conn.row_factory = sqlite3.Row # для доступа с полям по имени
    
    """ Соединение с лексемой."""
    dbMS = QSqlDatabase.addDatabase("QODBC")
    dbMS.setDatabaseName("lexema")
    dbMS.setUserName("sa")
    dbMS.setPassword("5318")
    if dbMS.open():
        print("соединение lexema")

    window = QWidget()
    window.setWindowTitle("CRM")
    window.resize(200, 200)

    vbox_btn = QVBoxLayout()                                                    # вертикальный контейнер кнопок
        # КНОПКИ
    btn_find_org = QPushButton("Организации")
    btn_find_org.clicked.connect(find_org)
    vbox_btn.addWidget(btn_find_org)

    btn_find = QPushButton("Контакты")
    btn_find.clicked.connect(find_pm_kont)
    vbox_btn.addWidget(btn_find)

    btnQuit = QPushButton("ВЫХОД")
    vbox_btn.addWidget(btnQuit)
    btnQuit.clicked.connect(quit)

    vbox_btn.addStretch()                                                       # добавляем пустое простанство за кнопками

    window.setLayout(vbox_btn)
    window.show()

    sys.exit(app.exec_())

    dbMy.close()
    QSqlDatabase.removeDatabase("My")


def find_org():
    """ Искать все организации у которых куратор супервайзер.
    Записывать только коды организаций и названия."""

    query = conn.cursor()
    query.execute("CREATE TABLE IF NOT EXISTS Spr_Org "
        "(code TEXT DEFAULT '', name TEXT DEFAULT '', vcode TEXT DEFAULT '', kurator TEXT DEFAULT '');")
    query.executescript("DELETE FROM Spr_Org; VACUUM;")                          # очистить рабочую таблицу и схлопуть базу
        
    sql = ("SELECT s.Code, u.Name, p.vcode, s.kurator "
        "FROM spr_org s INNER JOIN UniAnalit u ON s.code=u.vcode "
        "INNER JOIN p_kont p ON s.code=p.dogovor WHERE s.kurator<>123019")
    lexema = QSqlQuery(dbMS)
    lexema.exec(sql)
    while lexema.next():
        print(lexema.value(1).rstrip())
        try:                                                            
            query.execute("INSERT INTO Spr_Org (code, name, vcode, kurator) VALUES (?, ?, ?, ?)",
                (lexema.value(0), lexema.value(1).rstrip(), lexema.value(2), lexema.value(3)))
        except sqlite3.Error as e:
            logging.error('btn_collect_ref_click: {} {}'.
                format( e.args[0],sql))
            exit()
        else:
            conn.commit()                                               # конец транзакции


def find_pm_kont():

    """ По каждой организации. Удалить все контакты из по условиям. """
    query = conn.cursor()
    query.execute("SELECT name, vcode FROM Spr_Org;")
    lexema = QSqlQuery(dbMS)

    vcode = 00000
    sql = ("INSERT INTO AliansNew.dbo.Pm_Kont "
        "(SELECT * FROM Test.dbo.Pm_Kont "
        "WHERE (PCode={}) ".format(vcode))
    print(sql)    
    lexema.exec(sql)
    print(lexema.lastError().text())

        

    for name, vcode in query:
        if name[0] < 'А':
            continue
        if name[0] == 'Б':
            print ("остановка")
            break
        sql = ("INSERT INTO AliansNew.dbo.Pm_Kont "
            "(SELECT * FROM Test.dbo.Pm_Kont "
            "WHERE (PCode={}) ".format(vcode))
        print(sql)
        lexema.exec(sql)
        if lexema.lastError():
            print(lexema.lastError().text())
            exit()
        print(lexema.numRowsAffected(), name, lexema.lastError().text())


if __name__ == '__main__':                                                      # ОСНОВНОЙ ЦИКЛ
    main()
